package cn.iocoder.yudao.module.system.dal.dataobject.userbehavior;

import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;

import java.time.LocalDateTime;

/**
 * 用户行为详情 DO
 *
 * @author 系统开发团队
 */
@TableName("ai_user_behavior_detail")
@KeySequence("ai_user_behavior_detail_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserBehaviorDetailDO extends BaseDO {

    /**
     * 行为ID
     */
    @TableId
    private Long id;

    /**
     * 用户ID
     */
    private Long userId;

    /**
     * 用户名
     */
    private String username;

    /**
     * 用户类型：1-管理员，2-普通用户
     */
    private Integer userType;

    /**
     * 行为类型：1-页面访问，2-功能使用，3-API调用，4-文件操作，5-数据查询
     */
    private Integer behaviorType;

    /**
     * 行为分类
     */
    private String behaviorCategory;

    /**
     * 具体行为动作
     */
    private String behaviorAction;

    /**
     * 行为目标/对象
     */
    private String behaviorTarget;

    /**
     * 行为结果：1-成功，2-失败，3-部分成功
     */
    private Integer behaviorResult;

    /**
     * 行为时长（毫秒）
     */
    private Long behaviorDuration;

    /**
     * 会话ID
     */
    private String sessionId;

    /**
     * 会话开始时间
     */
    private LocalDateTime sessionStartTime;

    /**
     * 会话结束时间
     */
    private LocalDateTime sessionEndTime;

    /**
     * 设备类型：1-PC，2-移动端，3-Web
     */
    private Integer deviceType;

    /**
     * 浏览器类型
     */
    private String browserType;

    /**
     * 操作系统类型
     */
    private String osType;

    /**
     * IP地址
     */
    private String ipAddress;

    /**
     * 地区
     */
    private String region;

    /**
     * 城市
     */
    private String city;

    /**
     * 请求URL
     */
    private String requestUrl;

    /**
     * 请求方法
     */
    private String requestMethod;

    /**
     * 请求参数
     */
    private String requestParams;

    /**
     * 响应状态码
     */
    private Integer responseCode;

    /**
     * 响应时间（毫秒）
     */
    private Long responseTime;

    /**
     * 错误信息
     */
    private String errorMessage;

    /**
     * 业务数据（JSON格式）
     */
    private String businessData;

    /**
     * 扩展信息（JSON格式）
     */
    private String extendInfo;

    // ========== 常量定义 ==========

    /**
     * 用户类型 - 管理员
     */
    public static final Integer USER_TYPE_ADMIN = 1;

    /**
     * 用户类型 - 普通用户
     */
    public static final Integer USER_TYPE_MEMBER = 2;

    /**
     * 行为类型 - 页面访问
     */
    public static final Integer BEHAVIOR_TYPE_PAGE_VIEW = 1;

    /**
     * 行为类型 - 功能使用
     */
    public static final Integer BEHAVIOR_TYPE_FEATURE_USAGE = 2;

    /**
     * 行为类型 - API调用
     */
    public static final Integer BEHAVIOR_TYPE_API_CALL = 3;

    /**
     * 行为类型 - 文件操作
     */
    public static final Integer BEHAVIOR_TYPE_FILE_OPERATION = 4;

    /**
     * 行为类型 - 数据查询
     */
    public static final Integer BEHAVIOR_TYPE_DATA_QUERY = 5;

    /**
     * 行为结果 - 成功
     */
    public static final Integer BEHAVIOR_RESULT_SUCCESS = 1;

    /**
     * 行为结果 - 失败
     */
    public static final Integer BEHAVIOR_RESULT_FAILURE = 2;

    /**
     * 行为结果 - 部分成功
     */
    public static final Integer BEHAVIOR_RESULT_PARTIAL = 3;

    /**
     * 设备类型 - PC
     */
    public static final Integer DEVICE_TYPE_PC = 1;

    /**
     * 设备类型 - 移动端
     */
    public static final Integer DEVICE_TYPE_MOBILE = 2;

    /**
     * 设备类型 - Web
     */
    public static final Integer DEVICE_TYPE_WEB = 3;
}